# SPDX-License-Identifier: GPL-2.0
config ZRAM
	tristate "Compressed RAM block device support"
	depends on BLOCK && SYSFS && ZSMALLOC && CRYPTO
	depends on CRYPTO_LZO || CRYPTO_ZSTD || CRYPTO_LZ4 || CRYPTO_LZ4HC || CRYPTO_842
	help
	  Creates virtual block devices called /dev/zramX (X = 0, 1, ...).
	  Pages written to these disks are compressed and stored in memory
	  itself. These disks allow very fast I/O and compression provides
	  good amounts of memory savings.

	  It has several use cases, for example: /tmp storage, use as swap
	  disks and maybe many more.

	  See Documentation/admin-guide/blockdev/zram.rst for more information.

choice
	prompt "Default zram compressor"
	default ZRAM_DEF_COMP_LZORLE
	depends on ZRAM

config ZRAM_DEF_COMP_LZORLE
	bool "lzo-rle"
	depends on CRYPTO_LZO

config ZRAM_DEF_COMP_ZSTD
	bool "zstd"
	depends on CRYPTO_ZSTD

config ZRAM_DEF_COMP_LZ4
	bool "lz4"
	depends on CRYPTO_LZ4

config ZRAM_DEF_COMP_LZO
	bool "lzo"
	depends on CRYPTO_LZO

config ZRAM_DEF_COMP_LZ4HC
	bool "lz4hc"
	depends on CRYPTO_LZ4HC

config ZRAM_DEF_COMP_842
	bool "842"
	depends on CRYPTO_842

endchoice

config ZRAM_DEF_COMP
	string
	default "lzo-rle" if ZRAM_DEF_COMP_LZORLE
	default "zstd" if ZRAM_DEF_COMP_ZSTD
	default "lz4" if ZRAM_DEF_COMP_LZ4
	default "lzo" if ZRAM_DEF_COMP_LZO
	default "lz4hc" if ZRAM_DEF_COMP_LZ4HC
	default "842" if ZRAM_DEF_COMP_842

config ZRAM_DEDUP
	bool "Deduplication support for ZRAM data"
	depends on ZRAM && LIBCRC32C
	default n
	help
	  Deduplicate ZRAM data to reduce amount of memory consumption.
	  Advantage largely depends on the workload. In some cases, this
          option reduces memory usage to the half. However, if there is no
	  duplicated data, the amount of memory consumption would be
	  increased due to additional metadata usage. And, there is
	  computation time trade-off. Please check the benefit before
	  enabling this option. Experiment shows the positive effect when
	  the zram is used as blockdev and is used to store build output.

config ZRAM_WRITEBACK
       bool "Write back incompressible or idle page to backing device"
       depends on ZRAM
       help
	 With incompressible page, there is no memory saving to keep it
	 in memory. Instead, write it out to backing device.
	 For this feature, admin should set up backing device via
	 /sys/block/zramX/backing_dev.

	 With /sys/block/zramX/{idle,writeback}, application could ask
	 idle page's writeback to the backing device to save in memory.

	 See Documentation/admin-guide/blockdev/zram.rst for more information.

config ZRAM_MEMORY_TRACKING
	bool "Track zRam block status"
	depends on ZRAM && DEBUG_FS
	help
	  With this feature, admin can track the state of allocated blocks
	  of zRAM. Admin could see the information via
	  /sys/kernel/debug/zram/zramX/block_state.

	  See Documentation/admin-guide/blockdev/zram.rst for more information.
